﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using ITAP.ContourBuilder.Manipulation;
using ITAP.Core.Calculations;
using ITAP.Core.Modelling;

namespace ITAP.ContourBuilder.Operations
{
    public enum OperationEventState
    {
        Execute, 
        EndExecute, 
        Canceled
    }

    public delegate void OperationEvent(IOperation sender, OperationEventState state);

    public interface IOperation : IExecutable, ICloneable
    {
        string Name { get; }
        bool CanUndo { get; }
        bool Enabled { get; set; }
        void ObtainPeripheryState(GlobalPeripheryState state);
        void DrawOnGraphics(Graphics g, int screenWidth, int screenHeight, RectangleF modelRectangle, ModelPoint cameraCenter, ModelCoordinateConverter coordinateConverter);
        event OperationEvent OperationEvent;
    }
}
